﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using MemoryDuosRankings;

namespace MemoryDuosInterfaz
{
    public partial class SeleccionNivel : Form
    {
        private int ancho, alto;
        private Bitmap[] cartas;

        public SeleccionNivel()
        {
            InitializeComponent();
            // se inicializan las opciones de la selección de galería
            seleccionGaleria.Items.Add("Futbol");
            seleccionGaleria.Items.Add("Paises");
            alto = ancho = 0;
        }

        public List<Bitmap> crearListaImagenesPorTamanyo(String botonPulsado)
        {
            int numCartas = 0;

            List<Bitmap> listaImagenes = new List<Bitmap>();
            if (botonPulsado.Equals(botonFacil.Text))
            {
                alto = 4;
                ancho = 4;
            }
            else if (botonPulsado.Equals(botonNormal.Text))
            {
                alto = 5;
                ancho = 4;
            }
            else if (botonPulsado.Equals(botonDificil.Text))
            {
                alto = 6;
                ancho = 5;
            }
            else if (botonPulsado.Equals(botonCompeticion.Text))
            {
                alto = 7;
                ancho = 6;
            }

            // se añaden las cartas a la lista (son la mitad del tamaño del tablero)
            numCartas = (alto * ancho) / 2;
            for (int i = 0; i < numCartas; i++)
            {
                listaImagenes.Add(cartas[i]);
            }
            return listaImagenes;
        }

        public void SeleccionGaleria(String texto)
        {
            switch (texto)
            {
                case "Futbol":
                    {
                        establecerGaleriaFutbol();
                        break;
                    }
                case "Paises":
                    {
                        establecerGaleriaPaises();
                        break;
                    }
            }
        }

        public void establecerGaleriaFutbol()
        {
            cartas = new Bitmap[21] {Futbol.Athletic_Bilbao,
                                    Futbol.Atletico_Madrid,
                                    Futbol.Celta_Vigo,
                                    Futbol.Deportivo_La_Coruña,
                                    Futbol.Espanyol,
                                    Futbol.FC_Barcelona,
                                    Futbol.Getafe,
                                    Futbol.Granada_FC,
                                    Futbol.Levante,
                                    Futbol.LFP,
                                    Futbol.Malaga_CF,
                                    Futbol.Osasuna,
                                    Futbol.Rayo_Vellecano,
                                    Futbol.Rea_Madrid,
                                    Futbol.Real_Betis,
                                    Futbol.Real_Mallorca,
                                    Futbol.Real_Sociedad,
                                    Futbol.Real_Zaragoza,
                                    Futbol.Sevilla,
                                    Futbol.Valencia,
                                    Futbol.Valladolid};
        }

        public void establecerGaleriaPaises()
        {
            cartas = new Bitmap[21] {Banderas.Argentina,
                                     Banderas.Australia,
                                     Banderas.Brazil,
                                     Banderas.Cameroon,
                                     Banderas.Canada,
                                     Banderas.Chile,
                                     Banderas.China,
                                     Banderas.Cuba,
                                     Banderas.EEUU,
                                     Banderas.England,
                                     Banderas.France,
                                     Banderas.Germany,
                                     Banderas.Israel,
                                     Banderas.Italy,
                                     Banderas.Japan,
                                     Banderas.Portugal,
                                     Banderas.Spain,
                                     Banderas.United_Kingdom,
                                     Banderas.Uruguay,
                                     Banderas.Venezuela,
                                    Banderas.Wales};
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void botonCompeticion_Click(object sender, EventArgs e)
        {
            IniciarPartida(seleccionGaleria.Text, 3);
        }

        private void SeleccionNivel_Load(object sender, EventArgs e)
        {
        }

        private void botonDificil_Click(object sender, EventArgs e)
        {
            IniciarPartida(seleccionGaleria.Text, 2);
        }

        private void botonNormal_Click(object sender, EventArgs e)
        {
            IniciarPartida(seleccionGaleria.Text, 1);
        }

        private void botonFacil_Click(object sender, EventArgs e)
        {
            IniciarPartida(seleccionGaleria.Text, 0);
        }

        public void IniciarPartida(String galería, int dificultad)
        {
            SeleccionGaleria(galería);
            var lista = crearListaImagenesPorTamanyo(ObtenerDificultad(dificultad));
            var rnk = new Ranking(DateTime.Now, galería, dificultad);
            Tablero tablero = new Tablero(alto, ancho, lista, galería, rnk);
            IniciarPartidaSegunDificultad(dificultad, tablero);
        }
        public void IniciarPartida(Tablero tab,int dificultad)
        {
            SeleccionGaleria(tab.Galería);
            IniciarPartidaSegunDificultad(dificultad, tab);
        }

        public void ContinuarPartida(Ranking rnk)
        {
            SeleccionGaleria(rnk.Galería);
            var lista = crearListaImagenesPorTamanyo(ObtenerDificultad(rnk.Nivel));
            Tablero tablero = new Tablero(alto, ancho, lista, rnk.Galería, rnk);
            IniciarPartidaSegunDificultad(rnk.Nivel, tablero);
        }
        private string ObtenerDificultad(int numero)
        {
            switch (numero)
            {
                case 0:
                    {
                        return "FACIL";
                    }
                case 1:
                    {
                        return "NORMAL";
                    }
                case 2:
                    {
                        return "DIFICIL";
                    }
                case 3:
                    {
                        return "COMPETICION";

                    }
                default:
                    {
                        return "COMPETICION";                    
                    }
            }
        }
        private void IniciarPartidaSegunDificultad(int dificultad, Tablero tablero)
        {
            switch (dificultad)
            {
                case 0:
                    {
                        MostrarVentana(new PartidaFacil(tablero), Owner);
                        break;
                    }
                case 1:
                    {
                        MostrarVentana(new PartidaMedia(tablero), Owner);
                        break;
                    }
                case 2:
                    {
                        MostrarVentana(new PartidaDificil(tablero), Owner);
                        break;
                    }
                case 3:
                    {
                        MostrarVentana(new PartidaIndividual(tablero), Owner);
                        break;
                    }
                default:
                    break;
            }
        }


        private void MostrarVentana(Form ventana, Form aOcultar)
        {
            ventana.Show(aOcultar);
            this.Close();
            aOcultar.Hide();
        }

        private void SeleccionNivel_FormClosed(object sender, FormClosedEventArgs e)
        {
            Owner.BringToFront();
        }

        private void seleccionGaleria_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}